The applicant of the present application produces elevators and escalators as well as the corresponding control devices. These control devices are accessed by several applications, which, for example, may be used for displaying the current position of the elevators of a building or for performing diagnostic tasks.
To benefit from the advantages of machine independent code, these applications usually are written in programming languages such as JAVA, C# or Visual Basic, which produces byte code as intermediate language that is translated into native code during runtime. For example, the CADI (Computer Assisted Diagnostic Instrument) application, which is used for performing diagnostic tasks on an elevator, is normally written in C#. The source code is compiled by the .NET CLR (common language runtime) compiler into CIL (Common Intermediary Language). The CIL byte code is used by the CLR runtime, which is loaded when you start a .NET process. The JIT (just-in-time) compiler processes the CIL byte code and transforms it into native code that is processed by the processor of the computer.
Byte code is not protected against reverse engineering. Tools like ILSpy, which makes reverse engineering of .NET applications very easy, are available free and open-source that can manage this. However, from reverse engineered applications, the access codes for the control devices may be retrieved and misused.
A common way to protect C# source code against reverse engineering is obfuscation. Obfuscation renames classes, methods, properties and fields and may introduce false conditional statements and other misleading constructs in order to confuse and break decompiles. Obfuscation may make reading, writing and reverse-engineering of a program difficult and time-consuming, but not necessarily impossible.
WO 2006 031127 A2 relates to methods and arrangements for distributing computer programs and user licenses in a secure manner. Parts of the computer programs may be independently obfuscated or encrypted.